`timescale 1ns / 1ps
/*--------------------------------------------------------------------*\
FileName        : cbb_edge_detection.v
Author          ：hpy
Email           ：yuan_hp@qq.com
Date            ：2025年05月14日
Description     ：用于判断信号的跳变延，也可用于信号打拍同步 
上升沿: o_dat == 2'b01
下降沿: o_dat == 2'b10
跳变延: ^o_dat

1.例化
cbb_edge_detection u_edge_detection (clk,rst_n,i_dat , o_dat);
或者
cbb_edge_detection u_edge_detection (.clk(clk), .rst_n(), .i_dat(), .o_dat() );

\*--------------------------------------------------------------------*/
module cbb_edge_detection (
    input clk,
    input rst_n,
    input wire i_dat , 
    output reg [1:0] o_dat
);

always @(posedge clk ) begin
    if(!rst_n)begin
        o_dat <= 2'b00;
    end else begin
        o_dat <= {o_dat[0],i_dat} ;
    end
end

`ifdef  CBB_SIM 
`include "cbb_sim.v"
initial begin 
    forever begin
        @(posedge clk )begin 
            if(o_dat==2'b01)`CBB_SIM_LOG(("Rising edge %d",i_dat)) ;
            if(o_dat==2'b10)`CBB_SIM_LOG(("Falling edge " )) ;
            if(^o_dat)`CBB_SIM_LOG(("Edge " )) ;
        end
    end
end
`endif 


endmodule

